/**
 * 23 国赛 Java B组 (9/10)
 * 非对称二叉树
 * https://www.lanqiao.cn/problems/17139/learning/
 */
#include <bits/stdc++.h>
#ifndef DEBUG
#define debug
#endif
using namespace std;

int main() {
  cin.tie(0)->sync_with_stdio(0);
  int n, k;
  cin >> n >> k;
  auto dp = vector(n + 1, vector(n + 1, 0ll));
  dp[0][0] = 1;
  for (int cnt = 1; cnt <= n; cnt ++) {
    for (int left = 0; left < n; left ++) {
      int right = cnt - left - 1;
      for (int lh = 0; lh <= left; lh ++) {
        for (int rh = 0; rh <= right; rh ++) {
          int max_h = max(lh, rh), min_h = min(lh, rh);
          if (max_h < k * min_h) continue;
          dp[cnt][max_h + 1] += dp[left][lh] * dp[right][rh];
        }
      }
    }
  }
  debug(dp);
  cout << accumulate(dp[n].begin(), dp[n].end(), 0ll) << endl;
}